package socket.myRPC.proxy.impl;

import socket.myRPC.proxy.ClassInfoInjectionAware;
import socket.myRPC.rpc.protocol.MyContent;

import java.lang.reflect.Method;

/**
 * 远程调用
 *
 * @author lihh
 */
public class RemoteInvoke implements ClassInfoInjectionAware {
  
  private Class<?> proxyInterfaceInfo;
  
  @Override
  public void injectionClassInfo(Class<?> classInfo) {
    this.proxyInterfaceInfo = classInfo;
  }
  
  /**
   * 这个是执行的方法
   *
   * @author lihh
   */
  @SuppressWarnings("SuspiciousInvocationHandlerImplementation")
  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
    System.out.println("exec remote task ......");
    
    // 表示 类名称
    String name = proxyInterfaceInfo.getName();
    // 表示 方法名称
    String methodName = method.getName();
    // 表示方法 参数类型
    Class<?>[] parameterTypes = method.getParameterTypes();
    
    // 构建 content
    MyContent myContent = new MyContent();
    myContent.setArgs(args);
    myContent.setName(name);
    myContent.setMethodName(methodName);
    myContent.setParameterTypes(parameterTypes);
    
    return myContent;
  }
}
